import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 *A Mover es un actor que también tiene 'movimiento' y la capacidad de "turno". Tanto el movimiento y giro
  * Son relativos a la posición actual. Cuando se mueve, el Mover se moverá en la dirección
  * Que se enfrenta actualmente.
  *
  * Tanto el 'movimiento' y 'toca' métodos están disponibles con o sin parámetros.
  *
  * El 'Mover' clase es una subclase de Actor. Se puede utilizar mediante la creación de subclases, o
  * Copian en los escenarios y en línea editada.
  *
  * La dirección inicial está a la derecha. Por lo tanto, esta clase funciona mejor con imágenes que
  * Frente a la derecha cuando no se giran.
  *
  * Esta clase también puede comprobar si estamos cerca de la orilla del mundo.
 */
public class Mover extends Actor
{
    private static final double WALKING_SPEED = 5.0;
    /**
     * Act - do whatever the Mover wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    
    public void turn()
    {
        turn(90);
    }
    
    /**
     * Girar en angulo hacia la derecha.
     */
    public void turn(int angle)
    {
        setRotation(getRotation() + angle);
    }
    
    /**
     * Mover un poco hacia adelante.
     */
    public void move()
    {
        move(WALKING_SPEED);
    }
    
    /**
     * Mover una distancia específica hacia adelante en la dirección de la corriente.
     */
    public void move(double distance)
    {
        double angle = Math.toRadians(getRotation());
        int x = (int) Math.round(getX() + Math.cos(angle)*distance);
         int y = (int) Math.round(getY() + Math.sin(angle)*distance);
         
         setLocation(x, y);
    }
    
    /**
     * Probar si están cerca de uno de los bordes del mundo.
     */
    public boolean atWorldEdge()
    {
        if(getX() < 20 || getX() > getWorld().getWidth() - 20)
            return true;
        if(getY() < 20 || getY() > getWorld().getWidth() - 20)
            return true;
       else
            return false;
    } 
}
